'use client'

export {default as theme, type ThemeColorPaths, type ThemeShadowPaths} from './theme'
export {default as BaseStyles} from './BaseStyles'
export type {BaseStylesProps} from './BaseStyles'
export {default as ThemeProvider, useTheme, useColorSchemeVar} from './ThemeProvider'
export type {ThemeProviderProps} from './ThemeProvider'

// Layout
export * from './Button'
export {PageLayout} from './PageLayout'
export type {
  PageLayoutProps,
  PageLayoutHeaderProps,
  PageLayoutContentProps,
  PageLayoutPaneProps,
  PageLayoutFooterProps,
} from './PageLayout'
export {SplitPageLayout} from './SplitPageLayout'
export type {
  SplitPageLayoutProps,
  SplitPageLayoutHeaderProps,
  SplitPageLayoutContentProps,
  SplitPageLayoutPaneProps,
  SplitPageLayoutFooterProps,
} from './SplitPageLayout'

// Hooks
export {default as useDetails} from './hooks/useDetails'
export {default as useSafeTimeout} from './hooks/useSafeTimeout'
export {useOnOutsideClick} from './hooks/useOnOutsideClick'
export type {TouchOrMouseEvent} from './hooks/useOnOutsideClick'
export {useOpenAndCloseFocus} from './hooks/useOpenAndCloseFocus'
export {useOnEscapePress} from './hooks/useOnEscapePress'
export {useOverlay} from './hooks/useOverlay'
export {useConfirm} from './ConfirmationDialog/ConfirmationDialog'
export {useFocusTrap} from './hooks/useFocusTrap'
export type {FocusTrapHookSettings} from './hooks/useFocusTrap'
export {useFocusZone} from './hooks/useFocusZone'
export type {FocusZoneHookSettings} from './hooks/useFocusZone'
export {useRefObjectAsForwardedRef} from './hooks/useRefObjectAsForwardedRef'
export {useResizeObserver} from './hooks/useResizeObserver'
export {useResponsiveValue, type ResponsiveValue} from './hooks/useResponsiveValue'
export {default as useIsomorphicLayoutEffect} from './utils/useIsomorphicLayoutEffect'
export {useProvidedRefOrCreate} from './hooks/useProvidedRefOrCreate'
export {useId} from './hooks/useId'
export {useSyncedState} from './hooks/useSyncedState'
export {useAnchoredPosition, type AnchoredPositionHookSettings} from './hooks/useAnchoredPosition'

// Utils
export {createComponent} from './utils/create-component'
export type {SlotMarker} from './utils/types'

// Components
export {default as Radio} from './Radio'
export type {RadioProps} from './Radio'
export {ActionList} from './ActionList'
export type {
  ActionListProps,
  ActionListGroupProps,
  ActionListItemProps,
  ActionListLinkItemProps,
  ActionListDividerProps,
  ActionListDescriptionProps,
  ActionListLeadingVisualProps,
  ActionListTrailingVisualProps,
} from './ActionList'
export {ActionMenu} from './ActionMenu'
export type {ActionMenuProps, ActionMenuAnchorProps, ActionMenuButtonProps} from './ActionMenu'
export {AnchoredOverlay} from './AnchoredOverlay'
export type {AnchoredOverlayProps} from './AnchoredOverlay'
export {default as Autocomplete} from './Autocomplete'
export type {AutocompleteMenuProps, AutocompleteInputProps, AutocompleteOverlayProps} from './Autocomplete'
export {default as Avatar} from './Avatar'
export type {AvatarProps} from './Avatar'
export {default as AvatarStack} from './AvatarStack'
export type {AvatarStackProps} from './AvatarStack'
export {Banner} from './Banner'
export type {BannerProps} from './Banner'

export {default as BranchName} from './BranchName'
export type {BranchNameProps} from './BranchName'
export {default as Breadcrumbs, Breadcrumb} from './Breadcrumbs'
export type {BreadcrumbsProps, BreadcrumbsItemProps, BreadcrumbProps, BreadcrumbItemProps} from './Breadcrumbs'
export {default as ButtonGroup} from './ButtonGroup'
export type {ButtonGroupProps} from './ButtonGroup'
export type {CircleBadgeProps, CircleBadgeIconProps} from './CircleBadge'
export {default as CheckboxGroup} from './CheckboxGroup'
export type {CheckboxGroupProps} from './CheckboxGroup'
export {default as CircleBadge} from './CircleBadge'
export {default as CounterLabel} from './CounterLabel'
export type {CounterLabelProps} from './CounterLabel'
export {default as Details} from './Details'
export type {DetailsProps} from './Details'
export {Dialog} from './Dialog/Dialog'
export type {DialogProps, DialogHeaderProps, DialogButtonProps, DialogWidth, DialogHeight} from './Dialog/Dialog'
export type {ConfirmationDialogProps} from './ConfirmationDialog/ConfirmationDialog'
export {ConfirmationDialog} from './ConfirmationDialog/ConfirmationDialog'
export {default as Flash} from './Flash'
export type {FlashProps} from './Flash'
export {default as FormControl} from './FormControl'
export type {
  FormControlProps,
  FormControlCaptionProps,
  FormControlLabelProps,
  FormControlValidationProps,
} from './FormControl'
export {useFormControlForwardedProps} from './FormControl'
export {default as Header} from './Header'
export type {HeaderProps, HeaderItemProps, HeaderLinkProps} from './Header'
export {default as Heading} from './Heading'
export type {HeadingProps} from './Heading'
export {default as Label} from './Label'
export type {LabelProps, LabelColorOptions} from './Label'
export {default as LabelGroup} from './LabelGroup'
export type {LabelGroupProps} from './LabelGroup'
export {default as Link} from './Link'
export type {LinkProps} from './Link'
export {NavList} from './NavList'
export type {
  NavListProps,
  NavListItemProps,
  NavListSubNavProps,
  NavListGroupProps,
  NavListLeadingVisualProps,
  NavListTrailingVisualProps,
  NavListDividerProps,
  NavListGroupHeadingProps,
} from './NavList'
export {default as Overlay} from './Overlay'
export type {OverlayProps} from './Overlay'
export {default as Pagination} from './Pagination'
export type {PaginationProps} from './Pagination'
export {default as Popover} from './Popover'
export type {PopoverProps, PopoverContentProps} from './Popover'
export {default as Portal, registerPortalRoot, PortalContext} from './Portal'
export type {PortalProps} from './Portal'
export {ProgressBar} from './ProgressBar'
export type {ProgressBarProps, ProgressBarItemProps} from './ProgressBar'
export {default as RadioGroup} from './RadioGroup'
export type {RadioGroupProps} from './RadioGroup'
export type {RelativeTimeProps} from './RelativeTime'
export {default as RelativeTime} from './RelativeTime'
export {SegmentedControl} from './SegmentedControl'
export type {
  SegmentedControlProps,
  SegmentedControlButtonProps,
  SegmentedControlIconButtonProps,
} from './SegmentedControl'
// Currently there is a duplicate Select component at the root of the dir, so need to be explicit about exporting from the src/Select dir
export {default as Select} from './Select'
export type {SelectProps} from './Select'
export {SelectPanel} from './SelectPanel'
export type {
  SelectPanelProps,
  ItemProps as SelectPanelItemProps,
  GroupedListProps as SelectPanelGroupedListProps,
  ItemInput as SelectPanelItemInput,
} from './SelectPanel'
export {default as SideNav} from './SideNav'
export type {SideNavProps, SideNavLinkProps} from './SideNav'
export {default as Spinner} from './Spinner'
export type {SpinnerProps} from './Spinner'
export {default as StateLabel} from './StateLabel'
export type {StateLabelProps} from './StateLabel'
export {default as SubNav} from './SubNav'
export type {SubNavProps, SubNavLinkProps, SubNavLinksProps} from './SubNav'
export {default as ToggleSwitch} from './ToggleSwitch'
export type {ToggleSwitchProps} from './ToggleSwitch'
export {default as TextInput} from './TextInput'
export type {TextInputProps, TextInputActionProps} from './TextInput'
export {default as TextInputWithTokens} from './TextInputWithTokens'
export type {TextInputWithTokensProps} from './TextInputWithTokens'
export {default as Text} from './Text'
export type {TextProps} from './Text'
export {default as Timeline} from './Timeline'
export type {
  TimelineProps,
  TimelineBadgeProps,
  TimelineBodyProps,
  TimelineBreakProps,
  TimelineItemsProps,
  TimelineItemProps,
} from './Timeline'
export {default as Token, IssueLabelToken} from './Token'
export type {TokenProps, IssueLabelTokenProps} from './Token'
export {Tooltip} from './TooltipV2'
export type {TooltipProps} from './TooltipV2'
export {default as Truncate} from './Truncate'
export type {TruncateProps} from './Truncate'

export {default as Checkbox} from './Checkbox'
export type {CheckboxProps} from './Checkbox'

export {default as Textarea} from './Textarea'
export type {TextareaProps} from './Textarea'

export {TreeView} from './TreeView'
export type {
  TreeViewProps,
  TreeViewItemProps,
  TreeViewSubTreeProps,
  TreeViewVisualProps,
  TreeViewErrorDialogProps,
} from './TreeView'

export {VisuallyHidden} from './VisuallyHidden'
export type {VisuallyHiddenProps} from './VisuallyHidden'

export {UnderlineNav} from './UnderlineNav'
export type {UnderlineNavProps, UnderlineNavItemProps} from './UnderlineNav'

export {ActionBar} from './ActionBar'
export type {ActionBarProps} from './ActionBar'

export {Stack} from './Stack'
export type {StackProps, StackItemProps} from './Stack'

export {PageHeader} from './PageHeader'
export type {
  PageHeaderProps,
  TitleProps as PageHeaderTitleProps,
  ActionsProps as PageHeaderActionsProps,
  TitleAreaProps as PageHeaderTitleAreaProps,
  ChildrenPropTypes as PageHeaderChildrenPropTypes,
} from './PageHeader'

export {SkeletonBox} from './Skeleton'
export type {SkeletonBoxProps} from './Skeleton'
